{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Hadoop集群架构\n",
    ">hadoop是依据mapreduce的原理，用java语言实现的分布式处理机制\n",
    ">hadoop是一个能够对大量数据进行分布式处理的软件框架，实现了Google的Mapreduce编程模型和框架，能够把应用程序分割成许多小的工作单元，并把这些单元放到任何集群节点上执行\n",
    ">Mapreduce是hadoop的一个数据运算核心模块\n",
    "## 冗余化数据存储\n",
    ">分布式文件存储系统\n",
    "## 分布式文件系统\n",
    ">服务器块：\n",
    " ·文件被分为16-64MB大小的连续块\n",
    " ·每个文件块会被重复的存储2到3次\n",
    " ·尽量保证重复的数据块在不同的机架上\n",
    ">主节点\n",
    ">文件访问的客户端库"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## hadoop Common\n",
    ">工具包，为其他hadoop模块提供基础设施\n",
    "## hadoop HDFS\n",
    ">分布式文件系统，对海量数据存储\n",
    "## Map-Reduce\n",
    ">分布式处理策略\n",
    "## Yarn\n",
    "> 分布式资源管理，调度"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Map\n",
    "·逐个文件逐行扫描\n",
    "·扫描的同时抽取出我们感兴趣的内容(keys)\n",
    "## Group by key\n",
    "·排序和洗牌\n",
    "## Reduce\n",
    "·聚合、总结、过滤或转换\n",
    "·写入结果"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Reduce步骤\n",
    "输入：一些键值对\n",
    "定义两个函数：\n",
    "·Map(k,v)-><k',v' ' >*\n",
    ">所有有相同key，k'的值v'被reduce到一起\n",
    ">Reduce函数对每一个不同的key k'进行操作"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 运行Map-Reduce模型，还需要hadoop环境解决\n",
    "·对原始数据进行区分\n",
    "·调度程序在一系列的机器集群上都并行运行\n",
    "·执行过程中的group by key步骤\n",
    "·处理运行过程中的突发节点故障\n",
    "·处理并行运行过程中的节点和节点之间的通信"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 主节点的协调功能\n",
    "·主节点主要负责系统的协调\n",
    "·任务状态：等待初始，进行中，完成\n",
    "·有能工作的worker，待初始任务被调度运行\n",
    "·一个map任务完成后，它会向主节点发送它的产生的R个中间文件的位置和大小，每个文件对应一个reducer\n",
    "·主节点将这些信息传送至reducer"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 总结\n",
    "- reduce需要写函数，map有时候不用写\n",
    "- map工作主要修改key，reduce主要修改values\n",
    "- 对已有的算法进行map-reduce化\n",
    "- map对一个键值对输入产生一系列中间键值对\n",
    "- map函数将对所有输入键值对操作\n",
    "- 相同的key值v被reduce放一起，reduece函数对每一个不同的key进行操作\n",
    "## map reduce任务中数据分布倾斜导致reduce负载不均衡\n",
    "## 动态添加map和reduce的大小，以增加并行度\n",
    ">map是配置mapred.max.split.size，来定义map处理文件的大小，默认是256000000字段，换算就是256M。  如果想增加map的并行度，那么就是减少map处理文件的大小\n",
    "set mapred.max.split.size=xxx（更小的字节）\n",
    "\n",
    " \n",
    "\n",
    ">reduce和map是一致的，修改hive.exec.reducers.bytes.per.reducer这个参数\n",
    "通过控制这个来定义一个reduce处理文件的大小\n",
    "hive.exec.reducers.bytes.per.reducer\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 关联规则介绍\n",
    "- 数据挖掘是一项从大量的记录数据中提取有价值的、人们感兴趣的知识，这些知识是隐含的、事先未知的有用信息，提取的知识一般可表现为概念、规则、规律、模式等形式。\n",
    "- 规则：样本和样本之间的关联性\n",
    "- 模式：通过特征x，经过函数f得到结构y\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 关联规则基本概念\n",
    "- 每一个样本叫一个项目\n",
    "- 一个顾客购买商品的购物车。项目的组合叫事务\n",
    "- 事务中有意义的项目集合叫做项集\n",
    "- 挖掘的就是项集\n",
    "- 关联规则是形如X=》Y的逻辑蕴含式"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 支持度和信任度理解\n",
    "- 支持度：关联规则产出的是规则，找到频繁项集，确定哪些是经常出现的\n",
    "- 信任度：产出规则，知道X和Y是一个频繁项目集，谁对谁的影响更大"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
